home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
c
/
cuj9205.zip
/
1005074D
< prev
next >
Wrap
Text File
|
1992-06-02
|
1KB
|
53 lines
/*
* Listing 4 - An example of a stack abstraction with magic numbers
*/
#include <stdlib.h>
#include <assert.h>
#include <stack.h>
static char *magic = "Stack";
#define MAGIC_ON(p) ((p)->stk_magic = magic)
#define MAGIC_OFF(p) ((p)->stk_magic = NULL)
#define MAGIC_CHECK(p) assert((p != NULL) && ((p)->stk_magic == magic))
/* Create a stack */
STK *StkConstruct() {
STK *stk;
stk = malloc(sizeof(STK));
assert(stk != NULL);
stk->stk_top = 0;
MAGIC_ON(stk);
MAGIC_CHECK(stk);
return(stk);
}
/* Destroy a stack */
void StkDestroy(STK *stk) {
MAGIC_CHECK(stk);
MAGIC_OFF(stk);
free(stk);
}
/* Push an item on the stack */
void StkPush(STK *stk, void *item) {
MAGIC_CHECK(stk);
assert(stk->stk_top < STACK_SIZE);
stk->stk_stack[stk->stk_top++] = item;
}
/* Pop an item from the stack */
void *StkPop(STK *stk) {
MAGIC_CHECK(stk);
assert(stk->stk_top > 0);
return(stk->stk_stack[--(stk->stk_top)]);
}
/* Determine if the stack is empty */
int StkIsEmpty(STK *stk) {
MAGIC_CHECK(stk);
return(stk->stk_top == 0);
}